package com.learn.codesourcelearn.jdksource;

import java.util.ArrayList;
import java.util.Date;

/**
 * @author yekaile
 * @Date 2021/1/17 14:37
 */
public class Main1 {
    public static void main(String[] args) {

    }

    public static void instance2() throws Exception {
        /**不指定泛型的时候*/
        int i = add(1, 2); //这两个参数都是Integer，所以T为Integer类型  
        Number f = add(1, 1.2); //这两个参数一个是Integer，以风格是Float，所以取同一父类的最小级，为Number  
        Object o = add(1, "asd"); //这两个参数一个是Integer，以风格是Float，所以取同一父类的最小级，为Object  

        /**指定泛型的时候*/
        int a = Main1.<Integer>add(1, 2); //指定了Integer，所以只能为Integer类型或者其子类
        //     int b = Main1.<Integer>add(1, 2.2); //编译错误，指定了Integer，不能为Float
        Number c = Main1.<Number>add(1, 2.2); //指定为Number，所以可以为Integer和Float
    }

    public static <T> T add(T x, T y) {
        return y;
    }

    public static class Pair<T> {
        private T value;

        public T getValue() {
            return value;
        }

        public void setValue(T value) {
            this.value = value;
        }
    }

    public static class DateInter extends Pair<Date> {
        @Override
        public Date getValue() {
            return super.getValue();
        }

        @Override
        public void setValue(Date value) {
            super.setValue(value);
        }
    }
}
